package br.com.sga.modelo.entidade;

import br.com.sga.erro.ObjetoInvalidoException;
import br.com.sga.modelo.entidade.enums.EnumStatus;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Perfil{

    private Integer id;
    private Integer status = 1;
    private Date dtAtualizacao = new Date();
    private String codigo;
    private String nome;
    private String descricao;
    private String sistema;
    private Set<Sysfuncao> sysfuncoes = new HashSet<>(0);

    public Perfil() {
        super();
    }

    @Override
    public String toString(){
        return this.getNome();
    }
    
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    
    public Boolean isValido() throws ObjetoInvalidoException{
        if (getNome() == null || getNome().isEmpty() || 
                getSistema() == null || getSistema().isEmpty() || 
                getCodigo() == null || getCodigo().isEmpty() || 
                getDescricao() == null || getDescricao().isEmpty() || 
                getStatus() == null ||
                getDtAtualizacao() == null){
            throw new ObjetoInvalidoException();
        }
        return true;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Date getDtAtualizacao() {
        return dtAtualizacao;
    }

    public void setDtAtualizacao(Date dtAtualizacao) {
        this.dtAtualizacao = dtAtualizacao;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getStatusToString() {
        return EnumStatus.values()[this.getStatus()].getNome();
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getSistema() {
        return sistema;
    }

    public void setSistema(String sistema) {
        this.sistema = sistema;
    }

    public Set<Sysfuncao> getSysfuncoes() {
        return sysfuncoes;
    }

    public void setSysfuncoes(Set<Sysfuncao> sysfuncoes) {
        this.sysfuncoes = sysfuncoes;
    }
    
    /**
     * Retorna um mapa<acao,regra> baseado nas sysfuncoes do perfil
     * @return Map<String,String>
     */
    public Map<String,String> getMapa(){
        Map<String,String> mapa = new HashMap<>();
        for (Sysfuncao s : sysfuncoes) {
            mapa.put(s.getNome(), s.getRegra());
        }
        return mapa;
    }

}
